#ifndef QUATERNION_H_
#define QUATERNION_H_

#include "Vec3.h"

class Quaternion  
{
public:
    /* Public member data */
    float m_r;
    float m_i;
    float m_j;
    float m_k;
public:
    /* Deafult ctr*/
    Quaternion();
    /* Overloaded ctr */
    Quaternion(const float r, const float i, const float j, const float k);
    /* Overloaded ctr */
    Quaternion(const Quaternion& q);
    /* Overloaded ctr */
    Quaternion(const Vec3& axis, float degrees);
    /* Set Functions */
    Quaternion& SetStats(const Vec3& axis, float degrees);
    Quaternion& SetStats(const float i, const float j, const float k,
                         const float degrees);
    /* For Angular Velocity Only */
    Quaternion& AddScaleVector(const Vec3& v, float scale);
    /* Direct Rotation */
    Quaternion& RotateByVector(const Vec3& v);

    /* Normalising Quaternion functions */
    Quaternion& Normalise();

    /* operator overloads */
    Quaternion& operator*=(const Quaternion& other);

    /* For Debugging */
    void Print() const;
};

#endif 
